package com.gollum.system.service.impl;

import com.gollum.common.constant.NumberConstants;
import com.gollum.common.constant.SysConfigConstants;
import com.gollum.common.utils.BeanUtils;
import com.gollum.common.utils.StringUtils;
import com.gollum.common.utils.redis.RedisCache;
import com.gollum.system.domain.dao.SysConfigDao;
import com.gollum.system.domain.model.SysConfig;
import com.gollum.system.service.InitSystemService;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import java.util.List;

/**
 * 初始化系统配置
 *
 * @author Herther
 * @version 1.0.0
 * @createTime 2022年09月04日 21:34:00
 */
@Service
@Slf4j
public class InitSystemServiceImpl implements InitSystemService {

    @Autowired
    protected SysConfigDao sysConfigDao;

    @Autowired
    protected RedisCache redisCache;


    @Override
    public void initSystemConfig() {
        List<SysConfig> configs = sysConfigDao.findAll();
        configs.forEach(config->{
            //系统初始化参数不需要加入到缓存
            if (config.getConfigKey().equals(SysConfigConstants.SYS_CONFIG_INIT_FLAG)){
                return;
            }
            redisCache.setCacheObject(getRedisConfigKey(config.getConfigKey()), config.getConfigValue());
        });
        log.info("初始化系统配置到缓存成功：{}","SUCCESS");
    }


    @Override
    public Boolean hasInitParam() {
        SysConfig sysConfig = sysConfigDao.findByConfigKey(SysConfigConstants.SYS_CONFIG_INIT_FLAG);
        Assert.notNull(sysConfig, "初始化参数不存在");
        String configValue = sysConfig.getConfigValue();
        if (StringUtils.equals(configValue, NumberConstants.ZERO_STR)){
            setSysConfigInit(sysConfig);
            return true;
        }
        return false;
    }

    /**
     * 设置系统系统初始化 值为1 就是部初始化
     *
     * @param sysConfig 初始化的entity
     * @auther: Herther
     * @since 1.0.0
     * @date: 2022/11/6 0:13
     */
    private void setSysConfigInit(SysConfig sysConfig){
        SysConfig newSysConfig = new SysConfig();
        BeanUtils.copyBeanProp(sysConfig, newSysConfig);
        newSysConfig.setConfigValue(NumberConstants.ONE_STR);
        sysConfigDao.save(newSysConfig);
    }



    /**
     * 获取存储redis key
     *
     * @param configKey 配置文件名称
     * @return key
     * @auther: Herther
     * @since 1.0.0
     * @date: 2022/11/5 23:50
     */
    private String getRedisConfigKey(String configKey){
        return SysConfigConstants.SYS_CONFIG_KEY + configKey;
    }
}
